Data on computers changes, or is updated, over time as new or improved information is available. In some situations, it is desirable to be able to restore or otherwise access information as it existed at a particular point in time. This may be desirable because, for example, the current data has been lost or corrupted or subsequent changes to the data are determined to be undesirable. One solution is to copy all data stored on a source storage device and transfer the copies to another storage device for every time to which a user may want to restore the data to. However, such an approach would consume enormous network, processor, and storage resources; and in many cases the same data would be copied over and over again, even if it had not changed. It would be useful therefore to be able to restore data to particular points in time in a way that uses networking and processing resources efficiently.